{
    "cells": [
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "<center>\n",
                "    <p style=\"text-align:center\">\n",
                "        <img alt=\"phoenix logo\" src=\"https://storage.googleapis.com/arize-phoenix-assets/assets/phoenix-logo-light.svg\" width=\"200\"/>\n",
                "        <br>\n",
                "        <a href=\"https://docs.arize.com/phoenix/\">Docs</a>\n",
                "        |\n",
                "        <a href=\"https://github.com/Arize-ai/phoenix\">GitHub</a>\n",
                "        |\n",
                "        <a href=\"https://join.slack.com/t/arize-ai/shared_invite/zt-1px8dcmlf-fmThhDFD_V_48oU7ALan4Q\">Community</a>\n",
                "    </p>\n",
                "</center>\n",
                "<h1 align=\"center\">Q&A Classification Evals</h1>\n",
                "\n",
                "The purpose of this notebook is:\n",
                "\n",
                "- to evaluate the performance of an LLM-assisted approach to detecting issues with Q&A systems on retrieved context data\n",
                "- to provide an experimental framework for users to iterate and improve on the default classification template.\n",
                "\n",
                "## Install Dependencies and Import Libraries"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 1,
            "metadata": {},
            "outputs": [],
            "source": [
                "#####################\n",
                "## N_EVAL_SAMPLE_SIZE\n",
                "#####################\n",
                "# Eval sample size determines the run time\n",
                "# 100 samples: GPT-4 ~ 80 sec / GPT-3.5 ~ 40 sec\n",
                "# 1,000 samples: GPT-4 ~15-17 min / GPT-3.5 ~ 6-7min (depending on retries)\n",
                "# 10,000 samples GPT-4 ~170 min / GPT-3.5 ~ 70min\n",
                "N_EVAL_SAMPLE_SIZE = 100"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 2,
            "metadata": {},
            "outputs": [],
            "source": [
                "!pip install -qq \"arize-phoenix-evals\" \"openai>=1\" ipython matplotlib pycm scikit-learn tiktoken nest_asyncio"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "ℹ️ To enable async request submission in notebook environments like Jupyter or Google Colab, optionally use `nest_asyncio`. `nest_asyncio` globally patches `asyncio` to enable event loops to be re-entrant. This is not required for non-notebook environments.\n",
                "\n",
                "Without `nest_asyncio`, eval submission can be much slower, depending on your organization's rate limits. Speed increases of about 5x are typical."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 3,
            "metadata": {},
            "outputs": [],
            "source": [
                "import nest_asyncio\n",
                "\n",
                "nest_asyncio.apply()"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 4,
            "metadata": {},
            "outputs": [],
            "source": [
                "import os\n",
                "from getpass import getpass\n",
                "\n",
                "import matplotlib.pyplot as plt\n",
                "import openai\n",
                "import pandas as pd"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 5,
            "metadata": {},
            "outputs": [],
            "source": [
                "import phoenix.evals.templates.default_templates as templates\n",
                "from phoenix.evals import (\n",
                "    OpenAIModel,\n",
                "    download_benchmark_dataset,\n",
                "    llm_classify,\n",
                ")\n",
                "from pycm import ConfusionMatrix\n",
                "from sklearn.metrics import classification_report\n",
                "\n",
                "pd.set_option(\"display.max_colwidth\", None)"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Download Benchmark Dataset\n",
                "\n",
                "\n",
                "\n",
                "- Squad 2:\n",
                "The 2.0 version of the large-scale dataset Stanford Question Answering Dataset (SQuAD 2.0) allows researchers to design AI models for reading comprehension tasks under challenging constraints.\n",
                "https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/reports/default/15785042.pdf\n",
                "- Supplemental Data to Sqaud 2: In order to check the case of detecting incorrect answers, we created wrong answers based on the context data. The wrong answers are intermixed with right answers.\n",
                "- sampled_answer is a sampled column of randomly original Squad 2 or incorrect answers"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 6,
            "metadata": {},
            "outputs": [],
            "source": [
                "df = download_benchmark_dataset(task=\"qa-classification\", dataset_name=\"qa_generated_dataset\")"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "- **question**: This is the question the Q&A system is running against\n",
                "- **sampled_answer**: This is a random sample of correct_answer from Squad 2 or wrong_answer which is a made up incorrect answer. This is the column we test against as it has wrong and right answers.\n",
                "- **correct_answer**: True if answer is correct, False if not. The ground truth to test against.\n",
                "- **answers**: This is the right answer to the question.\n",
                "- **wrong_answer**: This is an incorrect answer generated by the context.\n",
                "- **context**: This is the context to be used to answer the question, and is what Q&A Eval must use to check the correct answer.\n",
                "\n"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 7,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/html": [
                            "<div>\n",
                            "<style scoped>\n",
                            "    .dataframe tbody tr th:only-of-type {\n",
                            "        vertical-align: middle;\n",
                            "    }\n",
                            "\n",
                            "    .dataframe tbody tr th {\n",
                            "        vertical-align: top;\n",
                            "    }\n",
                            "\n",
                            "    .dataframe thead th {\n",
                            "        text-align: right;\n",
                            "    }\n",
                            "</style>\n",
                            "<table border=\"1\" class=\"dataframe\">\n",
                            "  <thead>\n",
                            "    <tr style=\"text-align: right;\">\n",
                            "      <th></th>\n",
                            "      <th>id</th>\n",
                            "      <th>title</th>\n",
                            "      <th>context</th>\n",
                            "      <th>question</th>\n",
                            "      <th>answers</th>\n",
                            "      <th>correct_answer</th>\n",
                            "      <th>wrong_answer</th>\n",
                            "      <th>sampled_answer</th>\n",
                            "      <th>answer_true</th>\n",
                            "    </tr>\n",
                            "  </thead>\n",
                            "  <tbody>\n",
                            "    <tr>\n",
                            "      <th>0</th>\n",
                            "      <td>57317e8d497a881900248f87</td>\n",
                            "      <td>Mosaic</td>\n",
                            "      <td>Jerusalem with its many holy places probably had the highest concentration of mosaic-covered churches but very few of them survived the subsequent waves of destructions. The present remains do not do justice to the original richness of the city. The most important is the so-called \"Armenian Mosaic\" which was discovered in 1894 on the Street of the Prophets near Damascus Gate. It depicts a vine with many branches and grape clusters, which springs from a vase. Populating the vine's branches are peacocks, ducks, storks, pigeons, an eagle, a partridge, and a parrot in a cage. The inscription reads: \"For the memory and salvation of all those Armenians whose name the Lord knows.\" Beneath a corner of the mosaic is a small, natural cave which contained human bones dating to the 5th or 6th centuries. The symbolism of the mosaic and the presence of the burial cave indicates that the room was used as a mortuary chapel.</td>\n",
                            "      <td>When was the Armenian Mosaic re-discovered?</td>\n",
                            "      <td>1894</td>\n",
                            "      <td>True</td>\n",
                            "      <td>The Armenian Mosaic was re-discovered in 1920.</td>\n",
                            "      <td>1894</td>\n",
                            "      <td>True</td>\n",
                            "    </tr>\n",
                            "    <tr>\n",
                            "      <th>1</th>\n",
                            "      <td>56cfabed234ae51400d9be49</td>\n",
                            "      <td>New_York_City</td>\n",
                            "      <td>The first non-Native American inhabitant of what would eventually become New York City was Dominican trader Juan Rodriguez (transliterated to Dutch as Jan Rodrigues). Born in Santo Domingo of Portuguese and African descent, he arrived in Manhattan during the winter of 1613–1614, trapping for pelts and trading with the local population as a representative of the Dutch. Broadway, from 159th Street to 218th Street, is named Juan Rodriguez Way in his honor.</td>\n",
                            "      <td>Who was the first non-Indian person to live in what is now NYC?</td>\n",
                            "      <td>Juan Rodriguez</td>\n",
                            "      <td>True</td>\n",
                            "      <td>The first non-Indian person to live in what is now NYC was Italian explorer Christopher Columbus.</td>\n",
                            "      <td>Juan Rodriguez</td>\n",
                            "      <td>True</td>\n",
                            "    </tr>\n",
                            "    <tr>\n",
                            "      <th>2</th>\n",
                            "      <td>571a2c554faf5e1900b8a8f6</td>\n",
                            "      <td>Memory</td>\n",
                            "      <td>Short-term memory is supported by transient patterns of neuronal communication, dependent on regions of the frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe. Long-term memory, on the other hand, is maintained by more stable and permanent changes in neural connections widely spread throughout the brain. The hippocampus is essential (for learning new information) to the consolidation of information from short-term to long-term memory, although it does not seem to store information itself. Without the hippocampus, new memories are unable to be stored into long-term memory, as learned from patient Henry Molaison after removal of both his hippocampi, and there will be a very short attention span. Furthermore, it may be involved in changing neural connections for a period of three months or more after the initial learning.</td>\n",
                            "      <td>Which part of the brain does short-term memory seem to rely on?</td>\n",
                            "      <td>frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe</td>\n",
                            "      <td>True</td>\n",
                            "      <td>The cerebellum</td>\n",
                            "      <td>frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe</td>\n",
                            "      <td>True</td>\n",
                            "    </tr>\n",
                            "    <tr>\n",
                            "      <th>3</th>\n",
                            "      <td>57301bf5b2c2fd1400568889</td>\n",
                            "      <td>Roman_Republic</td>\n",
                            "      <td>In 62 BC, Pompey returned victorious from Asia. The Senate, elated by its successes against Catiline, refused to ratify the arrangements that Pompey had made. Pompey, in effect, became powerless. Thus, when Julius Caesar returned from a governorship in Spain in 61 BC, he found it easy to make an arrangement with Pompey. Caesar and Pompey, along with Crassus, established a private agreement, now known as the First Triumvirate. Under the agreement, Pompey's arrangements would be ratified. Caesar would be elected consul in 59 BC, and would then serve as governor of Gaul for five years. Crassus was promised a future consulship.</td>\n",
                            "      <td>What provided the Roman senate with exuberance?</td>\n",
                            "      <td>successes against Catiline</td>\n",
                            "      <td>True</td>\n",
                            "      <td>The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.</td>\n",
                            "      <td>The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.</td>\n",
                            "      <td>False</td>\n",
                            "    </tr>\n",
                            "    <tr>\n",
                            "      <th>4</th>\n",
                            "      <td>572f8ee0b2c2fd14005681f6</td>\n",
                            "      <td>Armenia</td>\n",
                            "      <td>The Seljuk Empire soon started to collapse. In the early 12th century, Armenian princes of the Zakarid noble family drove out the Seljuk Turks and established a semi-independent Armenian principality in Northern and Eastern Armenia, known as Zakarid Armenia, which lasted under the patronage of the Georgian Kingdom. The noble family of Orbelians shared control with the Zakarids in various parts of the country, especially in Syunik and Vayots Dzor, while the Armenian family of Hasan-Jalalians controlled provinces of Artsakh and Utik as the Kingdom of Artsakh.</td>\n",
                            "      <td>What area did the Hasan-jalalians command?</td>\n",
                            "      <td>Artsakh and Utik</td>\n",
                            "      <td>True</td>\n",
                            "      <td>The Hasan-Jalalians commanded the area of Syunik and Vayots Dzor.</td>\n",
                            "      <td>Artsakh and Utik</td>\n",
                            "      <td>True</td>\n",
                            "    </tr>\n",
                            "  </tbody>\n",
                            "</table>\n",
                            "</div>"
                        ],
                        "text/plain": [
                            "                         id           title  \\\n",
                            "0  57317e8d497a881900248f87          Mosaic   \n",
                            "1  56cfabed234ae51400d9be49   New_York_City   \n",
                            "2  571a2c554faf5e1900b8a8f6          Memory   \n",
                            "3  57301bf5b2c2fd1400568889  Roman_Republic   \n",
                            "4  572f8ee0b2c2fd14005681f6         Armenia   \n",
                            "\n",
                            "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     context  \\\n",
                            "0  Jerusalem with its many holy places probably had the highest concentration of mosaic-covered churches but very few of them survived the subsequent waves of destructions. The present remains do not do justice to the original richness of the city. The most important is the so-called \"Armenian Mosaic\" which was discovered in 1894 on the Street of the Prophets near Damascus Gate. It depicts a vine with many branches and grape clusters, which springs from a vase. Populating the vine's branches are peacocks, ducks, storks, pigeons, an eagle, a partridge, and a parrot in a cage. The inscription reads: \"For the memory and salvation of all those Armenians whose name the Lord knows.\" Beneath a corner of the mosaic is a small, natural cave which contained human bones dating to the 5th or 6th centuries. The symbolism of the mosaic and the presence of the burial cave indicates that the room was used as a mortuary chapel.   \n",
                            "1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  The first non-Native American inhabitant of what would eventually become New York City was Dominican trader Juan Rodriguez (transliterated to Dutch as Jan Rodrigues). Born in Santo Domingo of Portuguese and African descent, he arrived in Manhattan during the winter of 1613–1614, trapping for pelts and trading with the local population as a representative of the Dutch. Broadway, from 159th Street to 218th Street, is named Juan Rodriguez Way in his honor.   \n",
                            "2                                                                 Short-term memory is supported by transient patterns of neuronal communication, dependent on regions of the frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe. Long-term memory, on the other hand, is maintained by more stable and permanent changes in neural connections widely spread throughout the brain. The hippocampus is essential (for learning new information) to the consolidation of information from short-term to long-term memory, although it does not seem to store information itself. Without the hippocampus, new memories are unable to be stored into long-term memory, as learned from patient Henry Molaison after removal of both his hippocampi, and there will be a very short attention span. Furthermore, it may be involved in changing neural connections for a period of three months or more after the initial learning.   \n",
                            "3                                                                                                                                                                                                                                                                                                    In 62 BC, Pompey returned victorious from Asia. The Senate, elated by its successes against Catiline, refused to ratify the arrangements that Pompey had made. Pompey, in effect, became powerless. Thus, when Julius Caesar returned from a governorship in Spain in 61 BC, he found it easy to make an arrangement with Pompey. Caesar and Pompey, along with Crassus, established a private agreement, now known as the First Triumvirate. Under the agreement, Pompey's arrangements would be ratified. Caesar would be elected consul in 59 BC, and would then serve as governor of Gaul for five years. Crassus was promised a future consulship.   \n",
                            "4                                                                                                                                                                                                                                                                                                                                                                        The Seljuk Empire soon started to collapse. In the early 12th century, Armenian princes of the Zakarid noble family drove out the Seljuk Turks and established a semi-independent Armenian principality in Northern and Eastern Armenia, known as Zakarid Armenia, which lasted under the patronage of the Georgian Kingdom. The noble family of Orbelians shared control with the Zakarids in various parts of the country, especially in Syunik and Vayots Dzor, while the Armenian family of Hasan-Jalalians controlled provinces of Artsakh and Utik as the Kingdom of Artsakh.   \n",
                            "\n",
                            "                                                          question  \\\n",
                            "0                      When was the Armenian Mosaic re-discovered?   \n",
                            "1  Who was the first non-Indian person to live in what is now NYC?   \n",
                            "2  Which part of the brain does short-term memory seem to rely on?   \n",
                            "3                  What provided the Roman senate with exuberance?   \n",
                            "4                       What area did the Hasan-jalalians command?   \n",
                            "\n",
                            "                                                                          answers  \\\n",
                            "0                                                                            1894   \n",
                            "1                                                                  Juan Rodriguez   \n",
                            "2  frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe   \n",
                            "3                                                      successes against Catiline   \n",
                            "4                                                                Artsakh and Utik   \n",
                            "\n",
                            "   correct_answer  \\\n",
                            "0            True   \n",
                            "1            True   \n",
                            "2            True   \n",
                            "3            True   \n",
                            "4            True   \n",
                            "\n",
                            "                                                                                        wrong_answer  \\\n",
                            "0                                                     The Armenian Mosaic was re-discovered in 1920.   \n",
                            "1  The first non-Indian person to live in what is now NYC was Italian explorer Christopher Columbus.   \n",
                            "2                                                                                     The cerebellum   \n",
                            "3                        The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.   \n",
                            "4                                  The Hasan-Jalalians commanded the area of Syunik and Vayots Dzor.   \n",
                            "\n",
                            "                                                                   sampled_answer  \\\n",
                            "0                                                                            1894   \n",
                            "1                                                                  Juan Rodriguez   \n",
                            "2  frontal lobe (especially dorsolateral prefrontal cortex) and the parietal lobe   \n",
                            "3     The Roman Senate was filled with exuberance due to Pompey's defeat in Asia.   \n",
                            "4                                                                Artsakh and Utik   \n",
                            "\n",
                            "   answer_true  \n",
                            "0         True  \n",
                            "1         True  \n",
                            "2         True  \n",
                            "3        False  \n",
                            "4         True  "
                        ]
                    },
                    "execution_count": 7,
                    "metadata": {},
                    "output_type": "execute_result"
                }
            ],
            "source": [
                "df.head()"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Display Binary Q&A Classification Template\n",
                "\n",
                "View the default template used to classify hallucinations. You can tweak this template and evaluate its performance relative to the default."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 8,
            "metadata": {},
            "outputs": [
                {
                    "name": "stdout",
                    "output_type": "stream",
                    "text": [
                        "\n",
                        "You are given a question, an answer and reference text. You must determine whether the\n",
                        "given answer correctly answers the question based on the reference text. Here is the data:\n",
                        "    [BEGIN DATA]\n",
                        "    ************\n",
                        "    [Question]: {input}\n",
                        "    ************\n",
                        "    [Reference]: {reference}\n",
                        "    ************\n",
                        "    [Answer]: {output}\n",
                        "    [END DATA]\n",
                        "Your response must be a single word, either \"correct\" or \"incorrect\",\n",
                        "and should not contain any text or characters aside from that word.\n",
                        "\"correct\" means that the question is correctly and fully answered by the answer.\n",
                        "\"incorrect\" means that the question is not correctly or only partially answered by the\n",
                        "answer.\n",
                        "\n"
                    ]
                }
            ],
            "source": [
                "print(templates.QA_PROMPT_TEMPLATE)"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Configure the API Key\n",
                "\n",
                "Configure your OpenAI API key."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 9,
            "metadata": {},
            "outputs": [],
            "source": [
                "if not (openai_api_key := os.getenv(\"OPENAI_API_KEY\")):\n",
                "    openai_api_key = getpass(\"🔑 Enter your OpenAI API key: \")\n",
                "openai.api_key = openai_api_key\n",
                "os.environ[\"OPENAI_API_KEY\"] = openai_api_key"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## Benchmark Dataset Sample\n",
                "Sample size determines run time\n",
                "Recommend iterating small: 100 samples\n",
                "Then increasing to large test set"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 10,
            "metadata": {},
            "outputs": [],
            "source": [
                "df_sample = (\n",
                "    df.sample(n=N_EVAL_SAMPLE_SIZE)\n",
                "    .reset_index(drop=True)\n",
                "    .rename(\n",
                "        columns={\n",
                "            \"question\": \"input\",\n",
                "            \"context\": \"reference\",\n",
                "            \"sampled_answer\": \"output\",\n",
                "        }\n",
                "    )\n",
                ")"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "## LLM Evals: Q&A Classifications GPT-4\n",
                "Run Q&A classifications against a subset of the data."
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Instantiate the LLM and set parameters."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 11,
            "metadata": {},
            "outputs": [],
            "source": [
                "model = OpenAIModel(\n",
                "    model_name=\"gpt-4\",\n",
                "    temperature=0.0,\n",
                ")"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 12,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "text/plain": [
                            "\"Hello! I'm working perfectly. How can I assist you today?\""
                        ]
                    },
                    "execution_count": 12,
                    "metadata": {},
                    "output_type": "execute_result"
                }
            ],
            "source": [
                "model(\"Hello world, this is a test if you are working?\")"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "Run LLM Eval using the template against the dataset: This is the main Eval function"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 13,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "application/vnd.jupyter.widget-view+json": {
                            "model_id": "8edafe32383b4df88ccac9d249508d74",
                            "version_major": 2,
                            "version_minor": 0
                        },
                        "text/plain": [
                            "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "# The rails force the output to specific values of the template\n",
                "# It will remove text such as \",,,\" or \"...\", anything not the\n",
                "# binary value expected from the template\n",
                "rails = list(templates.QA_PROMPT_RAILS_MAP.values())\n",
                "Q_and_A_classifications = llm_classify(\n",
                "    dataframe=df_sample,\n",
                "    template=templates.QA_PROMPT_TEMPLATE,\n",
                "    model=model,\n",
                "    rails=rails,\n",
                "    concurrency=20,\n",
                ")[\"label\"].tolist()"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "\n",
                "\n",
                "Evaluate the predictions against human-labeled ground-truth Q&A labels."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 14,
            "metadata": {},
            "outputs": [
                {
                    "name": "stdout",
                    "output_type": "stream",
                    "text": [
                        "              precision    recall  f1-score   support\n",
                        "\n",
                        "     correct       1.00      0.86      0.92        49\n",
                        "   incorrect       0.88      1.00      0.94        51\n",
                        "\n",
                        "    accuracy                           0.93       100\n",
                        "   macro avg       0.94      0.93      0.93       100\n",
                        "weighted avg       0.94      0.93      0.93       100\n",
                        "\n"
                    ]
                },
                {
                    "data": {
                        "text/plain": [
                            "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
                        ]
                    },
                    "execution_count": 14,
                    "metadata": {},
                    "output_type": "execute_result"
                },
                {
                    "data": {
                        "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAHHCAYAAAB+wBhMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAABdcUlEQVR4nO3deVhU1RsH8O8MAoNsiuyKgIIoiaCihGSgkppLolluJZJraWq4ZSqgJriLue+aW+aSWZobuaXkjmHuikoqsriwqKDM+f3Bj8mRQRkZZKb5fnru8zjn3nvOe4eJeTnLvRIhhAARERGRlpKWdwBEREREL8NkhYiIiLQakxUiIiLSakxWiIiISKsxWSEiIiKtxmSFiIiItBqTFSIiItJqTFaIiIhIqzFZISIiIq3GZIX03uXLl9GyZUtYWlpCIpFg69atGq3/+vXrkEgkWLlypUbr1WVBQUEICgrSaJ3JycmQyWQ4fPiwRuvVZhKJBFFRUYrXK1euhEQiwfXr199oHC4uLujVq5fi9c6dO2FmZoa0tLQ3Ggf9dzFZIa1w9epV9O/fHzVq1IBMJoOFhQUCAgIwe/ZsPH78uEzbDg0NRWJiIiZNmoTVq1fD19e3TNt7k3r16gWJRAILCwuV7+Ply5chkUggkUgwffp0teu/ffs2oqKikJCQoIFoS2fChAnw8/NDQECAoqzw+uvVqwdVTxaRSCQYNGjQmwxTL7Ru3Rpubm6IiYkp71DoP4LJCpW77du3w8vLCz/++CPat2+POXPmICYmBtWrV8eIESMwZMiQMmv78ePHiI+PR+/evTFo0CB88sknqFatmkbbcHZ2xuPHj/Hpp59qtN6SqlChAh49eoRffvmlyL61a9dCJpO9dt23b9/G+PHj1U5Wdu/ejd27d792uy9KS0vDqlWrMGDAAJX7ExMTsWXLFo21p60+/fRTPH78GM7OzuUdCvr3749FixYhKyurvEOh/wAmK1SukpKS0LVrVzg7O+PcuXOYPXs2+vbti4EDB2L9+vU4d+4c3nrrrTJrv7CbulKlSmXWhkQigUwmg4GBQZm18TLGxsZo0aIF1q9fX2TfunXr0LZt2zcWy6NHjwAARkZGMDIy0li9a9asQYUKFdC+ffsi+0xMTFCrVi1MmDBBZe+Kpjx79gx5eXllVn9JGBgYQCaTQSKRlGscAPDhhx8iNzcXGzduLO9Q6D+AyQqVq6lTpyI7OxvLli2Dg4NDkf1ubm5KPSvPnj3DxIkTUbNmTRgbG8PFxQXffPMNcnNzlc5zcXFBu3bt8Mcff6Bx48aQyWSoUaMGvv/+e8UxUVFRir9AR4wYAYlEAhcXFwAFwweF/35eVFRUkS+CPXv24J133kGlSpVgZmYGDw8PfPPNN4r9xc1Z+f3339G0aVOYmpqiUqVK6NChA86fP6+yvStXrqBXr16oVKkSLC0tERYWpvjiL4nu3bvjt99+w4MHDxRlx48fx+XLl9G9e/cix9+7dw/Dhw+Hl5cXzMzMYGFhgffffx9nzpxRHLN//340atQIABAWFqYYTiq8zqCgINStWxcnT57Eu+++i4oVKyrelxfnrISGhkImkxW5/latWqFy5cq4ffv2S69v69at8PPzg5mZWZF9UqkUY8eOxV9//YWffvrppfUAQGpqKnr37g07OzvIZDJ4e3tj1apVSscU/kynT5+O2NhYxefx3Llzip/ZpUuX8Mknn8DS0hI2NjYYN24chBBITk5Ghw4dYGFhAXt7e8yYMUOp7ry8PERERKBhw4awtLSEqakpmjZtin379r0y9hfnrBTGomp7fo6JXC5HbGws3nrrLchkMtjZ2aF///64f/++Uv1CCHz77beoVq0aKlasiGbNmuHvv/9WGYutrS3q1auHn3/++ZVxE70KkxUqV7/88gtq1KiBJk2alOj4Pn36ICIiAg0aNMCsWbMQGBiImJgYdO3atcixV65cQefOnfHee+9hxowZqFy5Mnr16qX45dqpUyfMmjULANCtWzesXr0asbGxasX/999/o127dsjNzcWECRMwY8YMfPDBB6+c5Ll37160atUKqampiIqKQnh4OI4cOYKAgACVkyM//vhjZGVlISYmBh9//DFWrlyJ8ePHlzjOTp06QSKRKA2FrFu3DrVr10aDBg2KHH/t2jVs3boV7dq1w8yZMzFixAgkJiYiMDBQkTjUqVMHEyZMAAD069cPq1evxurVq/Huu+8q6snIyMD7778PHx8fxMbGolmzZirjmz17NmxsbBAaGor8/HwAwKJFi7B7927MmTMHjo6OxV7b06dPcfz4cZXXUah79+5wd3d/Ze/K48ePERQUhNWrV6NHjx6YNm0aLC0t0atXL8yePbvI8StWrMCcOXPQr18/zJgxA1ZWVop9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7OwMiUSCX3/9FWlpacjOzoa5uTmGDx+Or776CqtWrcLVq1dx6tQpzJkzB6tWrQIADBgwAJcvX8aIESNw8eJFrFu3DitXrnzp9ZmammLp0qXYvn07PvjgA+zduxfXr1/HiRMnMHLkSAwYMEDlee7u7oqek/Pnz6N///64e/euYv/Ro0cRHR2NEydO4ObNm9iyZQvS0tJQp04dJCUlYfTo0YiPj8eNGzewe/duXL58GXXq1AEARERE4Pvvv8f48ePx999/4/z58/jhhx8wduxYAMDKlSuxbNkynD17FteuXcOaNWtgYmICZ2fnEv1MiagY5T1phoiUJ9iqs//OnTuiZ8+ewtraWhgbG4saNWqIvn37iocPHwohCibUDhkyRFhYWIhKlSqJ8PBw0bNnz2In2AohxOPHj8VXX30lHBwchJGRkXBzcxPLly9X7J8wYYKwt7cXEolEhIaGCiEKJgXHxsYKDw8PYWhoKGxsbESrVq3EgQMHFOf98ssvws3NTRgbG4umTZuK5cuXv3JirBBCHD9+XHTq1EnY2NgIY2Nj4ebmJvr16ycuX74shCg6wTYjI0N06NBBmJmZCVtbWzF27Filaz537pxo1aqVor5atWqJOXPmCCGESElJESEhIYprd3Z2FhERESI/P18Rz86dO0WTJk2EiYmJsLCwEI0bNxaLFy8WQgjx008/CT8/P2FhYSFMTU3F22+/Lfbu3fvS6yOiV5MI8Zqz2IiIiIjeAA4DERERkVZjskJERERajckKERERaTUmK0RERKTVmKwQERGRVmOyQkRERFqNyQoRERFpNSYrREREpNWYrBAREZFWY7JCREREWo3JChEREWk1JitERESk1f4HQQ2nyJtfHS4AAAAASUVORK5CYII=",
                        "text/plain": [
                            "<Figure size 640x480 with 2 Axes>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "true_labels = df_sample[\"answer_true\"].map(templates.QA_PROMPT_RAILS_MAP).tolist()\n",
                "\n",
                "print(classification_report(true_labels, Q_and_A_classifications, labels=rails))\n",
                "confusion_matrix = ConfusionMatrix(\n",
                "    actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=rails\n",
                ")\n",
                "confusion_matrix.plot(\n",
                "    cmap=plt.colormaps[\"Blues\"],\n",
                "    number_label=True,\n",
                "    normalized=True,\n",
                ")"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "##  LLM Evals: Q&A Classifications GPT-3.5\n",
                "\n",
                "\n",
                "Evaluate the predictions against human-labeled ground-truth Q&A labels."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 15,
            "metadata": {},
            "outputs": [],
            "source": [
                "model = OpenAIModel(model_name=\"gpt-3.5-turbo\", temperature=0.0, request_timeout=20)"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 16,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "application/vnd.jupyter.widget-view+json": {
                            "model_id": "b1b0e299b3fd482da2f7e6f2d91c633e",
                            "version_major": 2,
                            "version_minor": 0
                        },
                        "text/plain": [
                            "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "Q_and_A_classifications = llm_classify(\n",
                "    dataframe=df_sample,\n",
                "    template=templates.QA_PROMPT_TEMPLATE,\n",
                "    model=model,\n",
                "    rails=list(templates.QA_PROMPT_RAILS_MAP.values()),\n",
                "    concurrency=20,\n",
                ")[\"label\"].tolist()"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 17,
            "metadata": {},
            "outputs": [
                {
                    "name": "stdout",
                    "output_type": "stream",
                    "text": [
                        "              precision    recall  f1-score   support\n",
                        "\n",
                        "     correct       0.96      0.94      0.95        49\n",
                        "   incorrect       0.94      0.96      0.95        51\n",
                        "\n",
                        "    accuracy                           0.95       100\n",
                        "   macro avg       0.95      0.95      0.95       100\n",
                        "weighted avg       0.95      0.95      0.95       100\n",
                        "\n"
                    ]
                },
                {
                    "data": {
                        "text/plain": [
                            "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
                        ]
                    },
                    "execution_count": 17,
                    "metadata": {},
                    "output_type": "execute_result"
                },
                {
                    "data": {
                        "image/png": "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",
                        "text/plain": [
                            "<Figure size 640x480 with 2 Axes>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "true_labels = df_sample[\"answer_true\"].map(templates.QA_PROMPT_RAILS_MAP).tolist()\n",
                "classes = list(templates.QA_PROMPT_RAILS_MAP.values())\n",
                "\n",
                "print(classification_report(true_labels, Q_and_A_classifications, labels=classes))\n",
                "confusion_matrix = ConfusionMatrix(\n",
                "    actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=classes\n",
                ")\n",
                "confusion_matrix.plot(\n",
                "    cmap=plt.colormaps[\"Blues\"],\n",
                "    number_label=True,\n",
                "    normalized=True,\n",
                ")"
            ]
        },
        {
            "cell_type": "markdown",
            "metadata": {},
            "source": [
                "##  LLM Evals: Q&A Classifications GPT-4 Turbo\n",
                "\n",
                "\n",
                "Evaluate the predictions against human-labeled ground-truth Q&A labels."
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 18,
            "metadata": {},
            "outputs": [],
            "source": [
                "model = OpenAIModel(model_name=\"gpt-4-turbo-preview\", temperature=0.0)"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 19,
            "metadata": {},
            "outputs": [
                {
                    "data": {
                        "application/vnd.jupyter.widget-view+json": {
                            "model_id": "da35db88d87349469686c7233d8c77a1",
                            "version_major": 2,
                            "version_minor": 0
                        },
                        "text/plain": [
                            "llm_classify |          | 0/100 (0.0%) | ⏳ 00:00<? | ?it/s"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "Q_and_A_classifications = llm_classify(\n",
                "    dataframe=df_sample,\n",
                "    template=templates.QA_PROMPT_TEMPLATE,\n",
                "    model=model,\n",
                "    rails=list(templates.QA_PROMPT_RAILS_MAP.values()),\n",
                "    concurrency=20,\n",
                ")[\"label\"].tolist()"
            ]
        },
        {
            "cell_type": "code",
            "execution_count": 20,
            "metadata": {},
            "outputs": [
                {
                    "name": "stdout",
                    "output_type": "stream",
                    "text": [
                        "              precision    recall  f1-score   support\n",
                        "\n",
                        "     correct       1.00      0.82      0.90        49\n",
                        "   incorrect       0.85      1.00      0.92        51\n",
                        "\n",
                        "    accuracy                           0.91       100\n",
                        "   macro avg       0.93      0.91      0.91       100\n",
                        "weighted avg       0.92      0.91      0.91       100\n",
                        "\n"
                    ]
                },
                {
                    "data": {
                        "text/plain": [
                            "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
                        ]
                    },
                    "execution_count": 20,
                    "metadata": {},
                    "output_type": "execute_result"
                },
                {
                    "data": {
                        "image/png": "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",
                        "text/plain": [
                            "<Figure size 640x480 with 2 Axes>"
                        ]
                    },
                    "metadata": {},
                    "output_type": "display_data"
                }
            ],
            "source": [
                "true_labels = df_sample[\"answer_true\"].map(templates.QA_PROMPT_RAILS_MAP).tolist()\n",
                "classes = list(templates.QA_PROMPT_RAILS_MAP.values())\n",
                "\n",
                "print(classification_report(true_labels, Q_and_A_classifications, labels=classes))\n",
                "confusion_matrix = ConfusionMatrix(\n",
                "    actual_vector=true_labels, predict_vector=Q_and_A_classifications, classes=classes\n",
                ")\n",
                "confusion_matrix.plot(\n",
                "    cmap=plt.colormaps[\"Blues\"],\n",
                "    number_label=True,\n",
                "    normalized=True,\n",
                ")"
            ]
        }
    ],
    "metadata": {
        "kernelspec": {
            "display_name": "Python 3 (ipykernel)",
            "language": "python",
            "name": "python3"
        },
        "language_info": {
            "codemirror_mode": {
                "name": "ipython",
                "version": 3
            },
            "file_extension": ".py",
            "mimetype": "text/x-python",
            "name": "python",
            "nbconvert_exporter": "python",
            "pygments_lexer": "ipython3",
            "version": "3.10.3"
        }
    },
    "nbformat": 4,
    "nbformat_minor": 4
}
